#include<stdio.h>
#include<math.h>
#include<string.h>
//void reverse_string(char* str){
//	if (*str == '\0')
//		return;
//
//	char* left = str;
//	char* right = str + strlen(str) - 1;
//	
//	char tmp = *left;
//	*left = *right;
//	*right = '\0';
//	reverse_string(str + 1);
//	*right = tmp;
//
//}


//int dif(int m, int n) {
//	int count = 0;
//	for (int i = 0; i < 32; ++i) {
//		if ((m & 1) != (n & 1)) {
//			count++;
//		}
//		m = m >> 1;
//		n = n >> 1;
//	}
//
//	return count;
//}



//int main() {
//	/*int i = 3;
//	printf("%d\n", i);
//
//	i = i >> 1;
//	printf("%d\n", i);*/
//
//	//char str[] = "hellostrrsa";
//
//	//printf("%s\n", str);
//
//	//reverse_string(str);
//
//	//printf("%s\n", str);
//
//	//printf("%d\n", dif(5, 7));
//	return 0;
//}

//
//int main() {
//	for (int i = 0; i <= 100000; ++i) {
//		int count = 1;
//		int tmp = i;
//		int sum = 0;
//
//		//数的位数
//		while (tmp / 10) {
//			count++;
//			tmp = tmp / 10;
//		}
//
//		//sum+=各个位的乘方
//
//		tmp = i;
//		while (tmp) {
//			sum += pow(tmp % 10, count);
//			tmp = tmp / 10;
//		}
//
//		//判断
//		if (sum == i) {
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}


void cfkj() {
	for (int i = 1; i <= 9; ++i) {
		for (int j = 1; j <= i; ++j) {
			printf("%d * %d = %d ", j, i, i * j);
		}
		printf("\n");
	}
}

int count9(int n) {
	int count = 0;
	for(int i = 1; i <= n; ++i){
		if (i % 10 == 9)
			count++;
		if (i / 10 == 9)
			count++;
	}
	return count;
}


//void printnum(int n) {
//	while (n) {
//		printf("%d ", n % 10);
//		n = n / 10;
//	}
//}
void printnum(int n) {
	if (n > 9) {
		printnum(n / 10);
	}
	printf("%d ", n % 10);
}

//int my_strlen(char* str) {
//	if (*str == '\0')
//		return 0;
//	return my_strlen(str + 1) + 1;
//}
//
//int my_strlen(char* str) {
//	int count = 0;
//	while (*str) {
//		count++;
//		str++;
//	}
//	return count;
//}
//int sumk(int n) {
//	//n * n-1 * n-2...
//	if (n == 1)
//		return 1;
//	return n * sumk(n - 1);
//}

int sumk(int n) {
	int ret = 1;
	for (int i = 1; i <= n; ++i) {
		ret *= i;
	}
	return ret;
}

//递归
//void reverse_string(char* str) {
//	char* left = str;
//	char* right = str + strlen(str) - 1;
//
//	char tmp = *left;
//	*left = *right;
//	*right = '\0';
//	if(right - left >=2)
//		reverse_string(str + 1);
//	*right = tmp;
//}

void reverse_string(char* str) {
	char* left = str;
	char* right = str + strlen(str) - 1;
	while (left < right) {
		char tmp = *left;
		*left = *right;
		*right = tmp;

		++left;
		--right;
	}
}

int dif(int m, int n) {
	int count = 0;
	for (int i = 0; i < 32; ++i) {
		if ((m & 1) != (n & 1)) {
			count++;
		}
		m >>= 1;
		n >>= 1;
	}

	return count;
}



void printbin(int n) {
	for (int i = 31; i >= 1; i -= 2) {
		printf("%d ", (n >> i) & 1);
	}
	printf("\n");
	for (int i = 30; i >= 0; i -= 2) {
		printf("%d ", (n >> i) & 1);
	}
}
//int num_of_1(int n) {
//	int count = 0;
//	for (int i = 0; i < 32; ++i) {
//		if (((n >> i) & 1) == 1)
//			count++;
//	}
//
//	return count;
//}

int num_of_1(int n) {
	int count = 0;
	for (int i = 0; i < 32; ++i) {
		if ((n >> i) & 1 == 1) {
			count++;
		}
	}
	return count;
}

void Swap(int n, int m) {
	printf("交换前: %d %d\n", n, m);
	n = n ^ m;
	m = n ^ m;
	n = n ^ m;
	printf("交换后: %d %d\n", n, m);
}

void printSxh(int n) {
	for (int i = 0; i <= n; ++i) {
		//判断n是几位数
		int count = 1;
		int tmp = i;
		while (tmp / 10) {
			count++;
			tmp = tmp / 10;
		}

		tmp = i;

		int sum = 0;
		//计算每一位的次方和
		while (tmp) {
			sum += pow(tmp % 10, count);
			tmp = tmp / 10;
		}

		//判断是否是
		if (sum == i) {
			printf("%d ", i);
		}
	}
}

int main() {
	//cfkj();
	//printf("%d ", count9(100));

	//printnum(9987);

	//printf("%d ", sumk(9));

	/*char str[] = "abcdefghijklmn";

	printf("%s\n", str);

	reverse_string(str);

	printf("%s\n", str);*/

	//printf("%d ", dif(10086, 10010));
	//printbin(9);

	//printf("%d\n", num_of_1(1));

	//Swap(666, 999);
	//printSxh(100000);
	return 0;
}